import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { ElMessage } from 'element-plus'

export const useUserStore = defineStore('user', () => {
  // 状态 - 使用sessionStorage实现标签页隔离
  const userInfo = ref(null)
  const token = ref(sessionStorage.getItem('token') || '')
  const isLoggedIn = computed(() => !!token.value && !!userInfo.value)

  // 用户角色
  const userRole = computed(() => {
    return userInfo.value?.userType || 'user'
  })

  // 是否是管理员
  const isAdmin = computed(() => {
    return userRole.value === 'admin'
  })

  // 是否是商家
  const isMerchant = computed(() => {
    return userRole.value === 'merchant'
  })

  // 登录
  const login = async (loginData) => {
    try {
      // 调用实际的登录API
      const { authAPI } = await import('@/api/auth')
      const response = await authAPI.login(loginData)

      // 保存token和用户信息到sessionStorage（标签页隔离）
      token.value = response.data.token
      userInfo.value = response.data.user

      // 使用sessionStorage实现标签页级别的会话隔离
      sessionStorage.setItem('token', response.data.token)
      sessionStorage.setItem('userInfo', JSON.stringify(response.data.user))

      // 登录成功后同步购物车数据
      try {
        const { useCartStore } = await import('@/stores/cart')
        const cartStore = useCartStore()
        await cartStore.syncCartToServer()
      } catch (cartError) {
        console.warn('同步购物车数据失败:', cartError)
      }

      return response.data
    } catch (error) {
      console.error('登录失败:', error)
      throw error
    }
  }

  // 注册
  const register = async (registerData) => {
    try {
      // 调用实际的注册API
      const { authAPI } = await import('@/api/auth')
      const response = await authAPI.register(registerData)

      return response.data
    } catch (error) {
      console.error('注册失败:', error)
      throw error
    }
  }

  // 登出
  const logout = async (showMessage = true) => {
    try {
      // 调用后端登出接口
      if (token.value) {
        const { authAPI } = await import('@/api/auth')
        await authAPI.logout()
      }
    } catch (error) {
      console.warn('后端登出失败:', error)
    }

    // 清除当前标签页的会话状态
    token.value = ''
    userInfo.value = null
    sessionStorage.removeItem('token')
    sessionStorage.removeItem('userInfo')

    // 登出时清空购物车数据，切换到本地存储模式
    try {
      const { useCartStore } = await import('@/stores/cart')
      const cartStore = useCartStore()
      cartStore.cartItems = []
      cartStore.loadCartFromLocalStorage()
    } catch (cartError) {
      console.warn('处理购物车数据失败:', cartError)
    }

    if (showMessage) {
      ElMessage.success('已退出登录')
    }
  }

  // 更新用户信息
  const updateUserInfo = (newUserInfo) => {
    userInfo.value = { ...userInfo.value, ...newUserInfo }
    sessionStorage.setItem('userInfo', JSON.stringify(userInfo.value))
  }

  // 初始化用户信息（从sessionStorage恢复）
  const initUserInfo = () => {
    const savedUserInfo = sessionStorage.getItem('userInfo')
    if (savedUserInfo) {
      try {
        userInfo.value = JSON.parse(savedUserInfo)
      } catch (error) {
        console.error('解析用户信息失败:', error)
        sessionStorage.removeItem('userInfo')
      }
    }
  }

  // 检查token有效性
  const checkTokenValidity = async () => {
    if (!token.value) return false

    try {
      // 调用API验证token
      const { authAPI } = await import('@/api/auth')
      const response = await authAPI.validateToken()

      if (response.code === 200) {
        // 更新用户信息
        userInfo.value = response.data
        return true
      } else {
        await logout(false)
        return false
      }
    } catch (error) {
      console.error('Token验证失败:', error)
      await logout(false)
      return false
    }
  }

  return {
    // 状态
    userInfo,
    token,
    isLoggedIn,
    userRole,
    isAdmin,
    isMerchant,

    // 方法
    login,
    register,
    logout,
    updateUserInfo,
    initUserInfo,
    checkTokenValidity
  }
})
